package br.com.registrofinancas.view;

import java.text.SimpleDateFormat;

import android.app.Activity;
import android.os.Bundle;
import br.com.registrofinancas.R;
import br.com.registrofinancas.database.MovimentosDAO;
import br.com.registrofinancas.model.MovimentationVO;
import br.com.registrofinancas.model.MovimentationVO.MovimentationIcon;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.BitmapDescriptor;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

/**
 * Activity que exibe um mapa ao Usuário para que ele possa ver os locais
 * onde houve ganhos e despesas.
 */
public class FinancialMapActivity extends Activity {
	
	private static final String TAG = "financialMap";
	
	private GoogleMap map;
	private MovimentosDAO movimentosDao;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_financial_map);

		map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
		
		movimentosDao = new MovimentosDAO(this.getApplicationContext());
		
		configureMap();
		
//		Marker hamburg = map.addMarker(new MarkerOptions().position(HAMBURG).title("Hamburg"));
//		Marker kiel = map.addMarker(new MarkerOptions().position(KIEL).title("Kiel").snippet("Kiel is cool")
//				.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));
//
//		// Move the camera instantly to hamburg with a zoom of 15.
//		map.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15));
//
//		// Zoom in, animating the camera.
//		map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
	}

	/**
	 * Configura os pontos que serão exibidos.
	 */
	protected void configureMap() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		LatLng firstCoord = null;
		for (MovimentationVO m : movimentosDao.getAllMovimentations()) {
			
			if (null == firstCoord) {
				firstCoord = new LatLng(m.getLatitude(), m.getLongitude());
			}
			
			map.addMarker(new MarkerOptions().position(
					new LatLng(m.getLatitude(), m.getLongitude())
					).title(m.getDescription()).icon(getMapMarker(m)));
		}
		
		if (firstCoord == null) {
			return;
		}

		// Movimenta a câmera para o primeiro marcador.
		map.moveCamera(CameraUpdateFactory.newLatLngZoom(firstCoord, 15));

		// Efetua Zoom animado
		map.animateCamera(CameraUpdateFactory.zoomTo(400), 2000, null);
	}
	
	/**
	 * Retorna a imagem que deve ser utilizada no mapa conforme a tipo de movimentação.
	 * @param movimentation Os detalhes da movimentação.
	 * @return BitmapDescriptor
	 */
	protected BitmapDescriptor getMapMarker(MovimentationVO movimentation) {
		BitmapDescriptor markerIcon = null;
		if (MovimentationIcon.INCOME == movimentation.getIcon()) {
			return BitmapDescriptorFactory.fromResource(R.drawable.green_pin);
		} else if (MovimentationIcon.OUTCOME == movimentation.getIcon()) {
			return BitmapDescriptorFactory.fromResource(R.drawable.red_pin);
		} else if (MovimentationIcon.INCOME_OUTCOME == movimentation.getIcon()) {
			return BitmapDescriptorFactory.fromResource(R.drawable.blue_pin);
		}
		
		return null;
	}
	
}
